डेस्कटॉप शेयरिंग के लिए WebRTC स्क्रीन कैप्चर की दुनिया का अन्वेषण करें। JavaScript, HTML, और संबंधित APIs का उपयोग करके सुरक्षित, कुशल और क्रॉस-प्लेटफ़ॉर्म समाधानों को लागू करना सीखें।
फ्रंटएंड WebRTC स्क्रीन कैप्चर: डेस्कटॉप शेयरिंग कार्यान्वयन के लिए एक व्यापक गाइड
रियल-टाइम कम्युनिकेशन हमारे वैश्विक स्तर पर बातचीत, सहयोग और व्यापार करने के तरीके में क्रांति ला रहा है। WebRTC (वेब रियल-टाइम कम्युनिकेशन) एक शक्तिशाली तकनीक है जो वेब ब्राउज़र के भीतर सीधे पीयर-टू-पीयर कम्युनिकेशन को सक्षम बनाती है, बिना किसी प्लगइन या मध्यस्थ की आवश्यकता के। WebRTC का एक प्रमुख पहलू स्क्रीन कैप्चर है, जो उपयोगकर्ताओं को अपने डेस्कटॉप या विशिष्ट एप्लिकेशन विंडो को दूसरों के साथ साझा करने की अनुमति देता है। यह गाइड विभिन्न तकनीकी पृष्ठभूमि वाले वैश्विक दर्शकों को ध्यान में रखते हुए, डेस्कटॉप शेयरिंग के लिए फ्रंटएंड WebRTC स्क्रीन कैप्चर को लागू करने का एक व्यापक अवलोकन प्रदान करता है।
WebRTC स्क्रीन कैप्चर को समझना
कार्यान्वयन में जाने से पहले, आइए मूल अवधारणाओं को समझें:
- WebRTC: एक मुफ़्त, ओपन-सोर्स प्रोजेक्ट जो ब्राउज़रों और मोबाइल एप्लिकेशन को सरल APIs के माध्यम से रियल-टाइम कम्युनिकेशन (RTC) क्षमताएं प्रदान करता है।
- स्क्रीन कैप्चर: उपयोगकर्ता की स्क्रीन पर प्रदर्शित सामग्री को कैप्चर करने की प्रक्रिया, चाहे वह पूरा डेस्कटॉप हो या कोई विशिष्ट विंडो/एप्लिकेशन।
- MediaStream: मीडिया सामग्री, जैसे ऑडियो या वीडियो, की एक स्ट्रीम जिसे WebRTC कनेक्शन पर प्रसारित किया जा सकता है। स्क्रीन कैप्चर एक MediaStream प्रदान करता है जिसमें स्क्रीन की सामग्री होती है।
- पीयर-टू-पीयर (P2P): WebRTC पीयर्स के बीच सीधे संचार को सक्षम बनाता है, जिससे पारंपरिक क्लाइंट-सर्वर मॉडल की तुलना में लेटेंसी कम होती है और प्रदर्शन में सुधार होता है।
WebRTC में स्क्रीन कैप्चर मुख्य रूप से getDisplayMedia और getUserMedia APIs द्वारा सुगम बनाया जाता है।
getDisplayMedia API
getDisplayMedia स्क्रीन कैप्चर के लिए पसंदीदा तरीका है क्योंकि यह विशेष रूप से इसी उद्देश्य के लिए डिज़ाइन किया गया है। यह उपयोगकर्ता को साझा करने के लिए एक स्क्रीन, विंडो या ब्राउज़र टैब चुनने के लिए प्रेरित करता है। यह एक Promise लौटाता है जो कैप्चर की गई सामग्री का प्रतिनिधित्व करने वाले MediaStream के साथ रिज़ॉल्व होता है।
getUserMedia API (पुराना तरीका)
हालांकि getDisplayMedia आधुनिक मानक है, पुराने ब्राउज़रों को स्क्रीन कैप्चर प्राप्त करने के लिए विशिष्ट बाधाओं के साथ getUserMedia का उपयोग करने की आवश्यकता हो सकती है। यह दृष्टिकोण आम तौर पर कम विश्वसनीय होता है और इसके लिए ब्राउज़र-विशिष्ट एक्सटेंशन की आवश्यकता हो सकती है।
कार्यान्वयन के चरण: एक चरण-दर-चरण गाइड
यहाँ getDisplayMedia का उपयोग करके WebRTC स्क्रीन कैप्चर को लागू करने का एक विस्तृत पूर्वाभ्यास है:
1. HTML संरचना सेट करना
सबसे पहले, स्थानीय और दूरस्थ वीडियो स्ट्रीम प्रदर्शित करने के लिए आवश्यक तत्वों के साथ एक मूल HTML फ़ाइल बनाएं, और स्क्रीन शेयरिंग शुरू करने के लिए एक बटन बनाएं।
<!DOCTYPE html>
<html>
<head>
<title>WebRTC Screen Capture</title>
</head>
<body>
<video id="localVideo" autoplay muted></video>
<video id="remoteVideo" autoplay></video>
<button id="shareButton">Share Screen</button>
<script src="script.js"></script>
</body>
</html>
स्पष्टीकरण:
<video id="localVideo">: स्थानीय उपयोगकर्ता के स्क्रीन कैप्चर को प्रदर्शित करता है।mutedएट्रिब्यूट स्थानीय स्ट्रीम से ऑडियो फीडबैक को रोकता है।<video id="remoteVideo">: दूरस्थ उपयोगकर्ता की वीडियो स्ट्रीम प्रदर्शित करता है।<button id="shareButton">: स्क्रीन शेयरिंग प्रक्रिया को ट्रिगर करता है।<script src="script.js">: WebRTC लॉजिक वाली जावास्क्रिप्ट फ़ाइल को लिंक करता है।
2. जावास्क्रिप्ट लॉजिक का कार्यान्वयन
अब, आइए स्क्रीन कैप्चर, सिग्नलिंग और पीयर कनेक्शन को संभालने के लिए जावास्क्रिप्ट कोड लागू करें।
const localVideo = document.getElementById('localVideo');
const remoteVideo = document.getElementById('remoteVideo');
const shareButton = document.getElementById('shareButton');
let localStream;
let remoteStream;
let peerConnection;
const configuration = {
iceServers: [
{ urls: 'stun:stun.l.google.com:19302' },
],
};
async function startScreenShare() {
try {
localStream = await navigator.mediaDevices.getDisplayMedia({
video: true,
audio: true // Optionally capture audio from the screen
});
localVideo.srcObject = localStream;
// Initialize peer connection and signaling here (explained later)
} catch (err) {
console.error('Error accessing screen capture:', err);
}
}
shareButton.addEventListener('click', startScreenShare);
// --- Signaling and Peer Connection (Details follow) ---
स्पष्टीकरण:
- कोड HTML तत्वों के संदर्भ प्राप्त करता है।
configuration: NAT ट्रैवर्सल के लिए STUN सर्वर निर्दिष्ट करता है (इस पर बाद में और जानकारी)। Google का STUN सर्वर एक सामान्य प्रारंभिक बिंदु है, लेकिन उत्पादन वातावरण के लिए अधिक मजबूत समाधान का उपयोग करने पर विचार करें।startScreenShareफ़ंक्शन: यह एसिंक्रोनस फ़ंक्शन स्क्रीन कैप्चर प्रक्रिया शुरू करता है:navigator.mediaDevices.getDisplayMedia(): उपयोगकर्ता को एक स्क्रीन, विंडो या टैब चुनने के लिए प्रेरित करता है।localVideo.srcObject = localStream;: कैप्चर की गई स्ट्रीम को स्थानीय वीडियो तत्व के स्रोत के रूप में सेट करता है।- त्रुटि हैंडलिंग:
try...catchब्लॉक स्क्रीन कैप्चर के दौरान संभावित त्रुटियों को संभालता है।
3. सिग्नलिंग: कनेक्शन स्थापित करना
WebRTC को सीधा कनेक्शन स्थापित करने से पहले पीयर्स के बीच मेटाडेटा का आदान-प्रदान करने के लिए एक सिग्नलिंग तंत्र की आवश्यकता होती है। सिग्नलिंग WebRTC का हिस्सा नहीं है; आपको इसे WebSockets, Socket.IO, या REST API जैसी अलग तकनीक का उपयोग करके लागू करना होगा।
सिग्नलिंग प्रक्रिया:
- ऑफ़र निर्माण: एक पीयर (कॉलर) एक ऑफ़र बनाता है, जिसमें उसकी मीडिया क्षमताओं (कोडेक्स, रिज़ॉल्यूशन, आदि) और नेटवर्क उम्मीदवारों (आईपी पते, पोर्ट) के बारे में जानकारी होती है।
- ऑफ़र ट्रांसमिशन: ऑफ़र को सिग्नलिंग सर्वर के माध्यम से दूसरे पीयर (रिसीवर) को भेजा जाता है।
- उत्तर निर्माण: रिसीवर ऑफ़र प्राप्त करता है और एक उत्तर बनाता है, जिसमें उसकी मीडिया क्षमताएं और नेटवर्क उम्मीदवार होते हैं।
- उत्तर ट्रांसमिशन: उत्तर को सिग्नलिंग सर्वर के माध्यम से कॉलर को वापस भेजा जाता है।
- ICE कैंडिडेट एक्सचेंज: दोनों पीयर ICE (इंटरैक्टिव कनेक्टिविटी एस्टैब्लिशमेंट) उम्मीदवारों का आदान-प्रदान करते हैं, जो कनेक्शन के लिए संभावित नेटवर्क पथ हैं। ICE उम्मीदवारों को भी सिग्नलिंग सर्वर के माध्यम से प्रेषित किया जाता है।
WebSocket का उपयोग करके उदाहरण (वैचारिक):
// ... Inside the startScreenShare function ...
const socket = new WebSocket('wss://your-signaling-server.com');
socket.onopen = () => {
console.log('Connected to signaling server');
};
socket.onmessage = async (event) => {
const message = JSON.parse(event.data);
if (message.type === 'offer') {
// Handle offer from the remote peer
console.log('Received offer:', message.offer);
await peerConnection.setRemoteDescription(message.offer);
const answer = await peerConnection.createAnswer();
await peerConnection.setLocalDescription(answer);
socket.send(JSON.stringify({ type: 'answer', answer: answer }));
} else if (message.type === 'answer') {
// Handle answer from the remote peer
console.log('Received answer:', message.answer);
await peerConnection.setRemoteDescription(message.answer);
} else if (message.type === 'candidate') {
// Handle ICE candidate from the remote peer
console.log('Received candidate:', message.candidate);
try {
await peerConnection.addIceCandidate(message.candidate);
} catch (e) {
console.error('Error adding ice candidate', e);
}
}
};
// Function to send messages through the signaling server
function sendMessage(message) {
socket.send(JSON.stringify(message));
}
// ... (Continue with Peer Connection setup below) ...
सिग्नलिंग के लिए महत्वपूर्ण विचार:
- स्केलेबिलिटी: एक ऐसी सिग्नलिंग तकनीक चुनें जो बड़ी संख्या में समवर्ती उपयोगकर्ताओं को संभाल सके। WebSockets आमतौर पर रियल-टाइम एप्लिकेशन के लिए एक अच्छा विकल्प है।
- सुरक्षा: सिग्नलिंग चैनल को अनधिकृत पहुंच और छिपकर बातें सुनने से बचाने के लिए उचित सुरक्षा उपाय लागू करें। एन्क्रिप्टेड संचार (wss://) के लिए TLS/SSL का उपयोग करें।
- विश्वसनीयता: सुनिश्चित करें कि सिग्नलिंग सर्वर अत्यधिक उपलब्ध और विश्वसनीय है।
- संदेश प्रारूप: सिग्नलिंग डेटा के आदान-प्रदान के लिए एक स्पष्ट और सुसंगत संदेश प्रारूप परिभाषित करें (जैसे, JSON का उपयोग करके)।
4. पीयर कनेक्शन: डायरेक्ट मीडिया चैनल स्थापित करना
RTCPeerConnection API WebRTC का दिल है, जो पीयर्स को मीडिया स्ट्रीम प्रसारित करने के लिए एक सीधा कनेक्शन स्थापित करने की अनुमति देता है। सिग्नलिंग प्रक्रिया के बाद, पीयर पीयर कनेक्शन स्थापित करने के लिए आदान-प्रदान की गई जानकारी (SDP ऑफ़र/उत्तर और ICE उम्मीदवार) का उपयोग करते हैं।
// ... Inside the startScreenShare function (after signaling setup) ...
peerConnection = new RTCPeerConnection(configuration);
// Handle ICE candidates
peerConnection.onicecandidate = (event) => {
if (event.candidate) {
console.log('Sending ICE candidate:', event.candidate);
sendMessage({ type: 'candidate', candidate: event.candidate });
}
};
// Handle remote stream
peerConnection.ontrack = (event) => {
console.log('Received remote stream');
remoteVideo.srcObject = event.streams[0];
remoteStream = event.streams[0];
};
// Add the local stream to the peer connection
localStream.getTracks().forEach(track => {
peerConnection.addTrack(track, localStream);
});
// Create and send the offer (if you are the caller)
async function createOffer() {
try {
const offer = await peerConnection.createOffer();
await peerConnection.setLocalDescription(offer);
console.log('Sending offer:', offer);
sendMessage({ type: 'offer', offer: offer });
} catch (e) {
console.error('Error creating offer', e);
}
}
createOffer(); // Only call this if you're the 'caller' in the connection
स्पष्टीकरण:
peerConnection = new RTCPeerConnection(configuration);: STUN सर्वर कॉन्फ़िगरेशन का उपयोग करके एक नयाRTCPeerConnectionइंस्टेंस बनाता है।onicecandidate: यह इवेंट हैंडलर तब ट्रिगर होता है जब ब्राउज़र एक नया ICE उम्मीदवार खोजता है। उम्मीदवार को सिग्नलिंग सर्वर के माध्यम से दूरस्थ पीयर को भेजा जाता है।ontrack: यह इवेंट हैंडलर तब ट्रिगर होता है जब दूरस्थ पीयर मीडिया ट्रैक भेजना शुरू करता है। प्राप्त स्ट्रीम कोremoteVideoतत्व को सौंपा गया है।addTrack: स्थानीय स्ट्रीम के ट्रैक को पीयर कनेक्शन में जोड़ता है।createOffer: स्थानीय पीयर की मीडिया क्षमताओं का वर्णन करते हुए एक SDP ऑफ़र बनाता है।setLocalDescription: बनाए गए ऑफ़र पर पीयर कनेक्शन का स्थानीय विवरण सेट करता है।- फिर ऑफ़र को सिग्नलिंग चैनल के माध्यम से दूरस्थ पीयर को भेजा जाता है।
5. ICE (इंटरैक्टिव कनेक्टिविटी एस्टैब्लिशमेंट)
ICE, NAT ट्रैवर्सल के लिए एक महत्वपूर्ण ढांचा है, जो WebRTC पीयर्स को फ़ायरवॉल या NAT उपकरणों के पीछे होने पर भी कनेक्शन स्थापित करने की अनुमति देता है। ICE पीयर्स के बीच सर्वोत्तम संभव नेटवर्क पथ खोजने के लिए विभिन्न तकनीकों का प्रयास करता है:
- STUN (सेशन ट्रैवर्सल यूटिलिटीज फॉर NAT): एक हल्का प्रोटोकॉल जो एक पीयर को अपना सार्वजनिक आईपी पता और पोर्ट खोजने की अनुमति देता है। कोड में
configurationऑब्जेक्ट में एक STUN सर्वर पता शामिल है। - TURN (ट्रैवर्सल यूजिंग रिलेज अराउंड NAT): एक अधिक जटिल प्रोटोकॉल जो पीयर्स के बीच ट्रैफ़िक को अग्रेषित करने के लिए एक रिले सर्वर का उपयोग करता है यदि सीधा कनेक्शन स्थापित नहीं किया जा सकता है। TURN सर्वर STUN सर्वर की तुलना में अधिक संसाधन-गहन होते हैं, लेकिन उन परिदृश्यों के लिए आवश्यक हैं जहां सीधी कनेक्टिविटी असंभव है।
STUN/TURN सर्वर का महत्व:
STUN/TURN सर्वर के बिना, NAT उपकरणों के पीछे के उपयोगकर्ताओं के लिए WebRTC कनेक्शन विफल होने की संभावना है, जो घर और कॉर्पोरेट नेटवर्क में आम हैं। इसलिए, सफल WebRTC परिनियोजन के लिए विश्वसनीय STUN/TURN सर्वर अवसंरचना प्रदान करना महत्वपूर्ण है। उच्च उपलब्धता और प्रदर्शन सुनिश्चित करने के लिए उत्पादन वातावरण के लिए वाणिज्यिक TURN सर्वर प्रदाताओं का उपयोग करने पर विचार करें।
उन्नत विषय और विचार
त्रुटि हैंडलिंग और लचीलापन
WebRTC एप्लिकेशन को विभिन्न त्रुटि परिदृश्यों, जैसे नेटवर्क रुकावट, डिवाइस एक्सेस विफलताएं, और सिग्नलिंग सर्वर समस्याओं को संभालने के लिए डिज़ाइन किया जाना चाहिए। प्रतिकूल परिस्थितियों में भी एक सहज उपयोगकर्ता अनुभव प्रदान करने के लिए मजबूत त्रुटि हैंडलिंग तंत्र लागू करें।
सुरक्षा संबंधी विचार
WebRTC एप्लिकेशन में सुरक्षा सर्वोपरि है। सुनिश्चित करें कि निम्नलिखित सुरक्षा उपाय मौजूद हैं:
- एन्क्रिप्शन: WebRTC मीडिया स्ट्रीम और सिग्नलिंग डेटा को एन्क्रिप्ट करने के लिए DTLS (डेटाग्राम ट्रांसपोर्ट लेयर सिक्योरिटी) का उपयोग करता है।
- प्रमाणीकरण: WebRTC एप्लिकेशन तक अनधिकृत पहुंच को रोकने के लिए उचित प्रमाणीकरण तंत्र लागू करें।
- प्राधिकरण: उपयोगकर्ता भूमिकाओं और अनुमतियों के आधार पर स्क्रीन शेयरिंग सुविधाओं तक पहुंच को नियंत्रित करें।
- सिग्नलिंग सुरक्षा: TLS/SSL (wss://) का उपयोग करके सिग्नलिंग चैनल को सुरक्षित करें।
- कंटेंट सिक्योरिटी पॉलिसी (CSP): उन संसाधनों को प्रतिबंधित करने के लिए CSP का उपयोग करें जिन्हें ब्राउज़र को लोड करने की अनुमति है, जिससे क्रॉस-साइट स्क्रिप्टिंग (XSS) हमलों के जोखिम को कम किया जा सके।
क्रॉस-ब्राउज़र संगतता
WebRTC अधिकांश आधुनिक ब्राउज़रों द्वारा समर्थित है, लेकिन API कार्यान्वयन और समर्थित कोडेक्स में सूक्ष्म अंतर हो सकते हैं। संगतता और एक सुसंगत उपयोगकर्ता अनुभव सुनिश्चित करने के लिए अपने एप्लिकेशन का विभिन्न ब्राउज़रों (क्रोम, फ़ायरफ़ॉक्स, सफारी, एज) पर अच्छी तरह से परीक्षण करें। ब्राउज़र-विशिष्ट अंतरों को सामान्य करने के लिए adapter.js जैसी लाइब्रेरी का उपयोग करने पर विचार करें।
प्रदर्शन अनुकूलन
कम विलंबता और उच्च-गुणवत्ता वाली मीडिया स्ट्रीम सुनिश्चित करने के लिए अपने WebRTC एप्लिकेशन को प्रदर्शन के लिए अनुकूलित करें। निम्नलिखित अनुकूलन तकनीकों पर विचार करें:
- कोडेक चयन: नेटवर्क स्थितियों और डिवाइस क्षमताओं के आधार पर उपयुक्त वीडियो और ऑडियो कोडेक चुनें। VP8 और VP9 सामान्य वीडियो कोडेक हैं, जबकि Opus एक लोकप्रिय ऑडियो कोडेक है।
- बैंडविड्थ प्रबंधन: उपलब्ध बैंडविड्थ के आधार पर मीडिया बिटरेट को समायोजित करने के लिए बैंडविड्थ अनुमान और अनुकूलन एल्गोरिदम लागू करें।
- रिज़ॉल्यूशन और फ्रेम रेट: कम-बैंडविड्थ स्थितियों में वीडियो स्ट्रीम के रिज़ॉल्यूशन और फ्रेम रेट को कम करें।
- हार्डवेयर त्वरण: प्रदर्शन में सुधार के लिए वीडियो एन्कोडिंग और डिकोडिंग के लिए हार्डवेयर त्वरण का लाभ उठाएं।
मोबाइल विचार
WebRTC मोबाइल उपकरणों पर भी समर्थित है, लेकिन वायर्ड नेटवर्क की तुलना में मोबाइल नेटवर्क में अक्सर सीमित बैंडविड्थ और उच्च विलंबता होती है। कम बिटरेट, अनुकूली स्ट्रीमिंग तकनीक और बिजली-बचत रणनीतियों का उपयोग करके मोबाइल उपकरणों के लिए अपने WebRTC एप्लिकेशन को अनुकूलित करें।
अभिगम्यता
सुनिश्चित करें कि आपका WebRTC एप्लिकेशन विकलांग उपयोगकर्ताओं के लिए सुलभ है। वीडियो स्ट्रीम, कीबोर्ड नेविगेशन और स्क्रीन रीडर संगतता के लिए कैप्शन प्रदान करें।
वैश्विक उदाहरण और उपयोग के मामले
WebRTC स्क्रीन कैप्चर के वैश्विक स्तर पर विभिन्न उद्योगों में अनुप्रयोगों की एक विस्तृत श्रृंखला है:
- दूरस्थ सहयोग: विभिन्न स्थानों (जैसे, बर्लिन, टोक्यो, न्यूयॉर्क) में टीमों को दस्तावेज़ों, प्रस्तुतियों और डिज़ाइनों पर वास्तविक समय में सहयोग करने में सक्षम बनाता है।
- ऑनलाइन शिक्षा: भारत में शिक्षकों को ऑनलाइन व्याख्यान और ट्यूटोरियल के लिए दुनिया भर के छात्रों के साथ अपनी स्क्रीन साझा करने की अनुमति देता है।
- तकनीकी सहायता: फिलीपींस में सहायता एजेंटों को संयुक्त राज्य अमेरिका में उपयोगकर्ताओं के कंप्यूटरों तक दूरस्थ रूप से पहुंचने और समस्या निवारण करने में सक्षम बनाता है।
- आभासी कार्यक्रम: वेबिनार और आभासी सम्मेलनों के दौरान स्क्रीन शेयरिंग की सुविधा प्रदान करता है, जिससे अर्जेंटीना के वक्ता वैश्विक दर्शकों के सामने अपनी स्लाइड प्रस्तुत कर सकते हैं।
- गेमिंग: ऑस्ट्रेलिया में गेमर्स को ट्विच और यूट्यूब जैसे प्लेटफॉर्म पर दुनिया भर के दर्शकों के लिए अपने गेमप्ले को स्ट्रीम करने की अनुमति देता है।
- टेलीमेडिसिन: कनाडा में डॉक्टरों को ग्रामीण क्षेत्रों में मरीजों द्वारा स्क्रीन कैप्चर के माध्यम से साझा की गई चिकित्सा छवियों की समीक्षा करने की अनुमति देता है।
निष्कर्ष
WebRTC स्क्रीन कैप्चर एक शक्तिशाली तकनीक है जो दुनिया भर में वास्तविक समय में सहयोग, संचार और ज्ञान साझा करने में सक्षम बनाती है। मूल अवधारणाओं को समझकर, कार्यान्वयन चरणों का पालन करके, और इस गाइड में चर्चा किए गए उन्नत विषयों पर विचार करके, आप मजबूत और स्केलेबल WebRTC एप्लिकेशन बना सकते हैं जो एक विविध वैश्विक दर्शकों की जरूरतों को पूरा करते हैं। एक सहज और समावेशी उपयोगकर्ता अनुभव प्रदान करने के लिए सुरक्षा, प्रदर्शन और अभिगम्यता को प्राथमिकता देना याद रखें।
जैसे-जैसे WebRTC का विकास जारी है, नवीनतम मानकों और सर्वोत्तम प्रथाओं के साथ अद्यतित रहना आवश्यक है। आधिकारिक WebRTC दस्तावेज़ीकरण का अन्वेषण करें, ऑनलाइन समुदायों में भाग लें, और अपने ज्ञान और कौशल का विस्तार करने के लिए विभिन्न पुस्तकालयों और रूपरेखाओं के साथ प्रयोग करें। रियल-टाइम कम्युनिकेशन का भविष्य उज्ज्वल है, और WebRTC स्क्रीन कैप्चर दुनिया भर के लोगों और सूचनाओं को जोड़ने में एक महत्वपूर्ण भूमिका निभाएगा।